home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
timedat.exe
/
TIMPOINT.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
8KB
|
368 lines
/*
Copyright 1992 - John K. Humkey
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <dos.h>
#include "timespan.h"
#include "timpoint.h"
extern int __european;
void astro_to_date(int *year, int *month, int *day, long *ast);
void date_to_astro(int *year, int *month, int *day, long *ast);
void time_to_astro(int *hour, int *mins, int *sec, int *millisec, long *ast);
void astro_to_time(int *hour, int *mins, int *sec, int *millisec, long *ast);
//
// TIMEPOINT::OPERATOR +
//
//
timepoint operator + ( timepoint &tdone, timespan &tdtwo )
{
timepoint temptd;
long dx,tx;
tx = tdone.msecval + tdtwo.msecval;
dx = tdone.dateval + tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
return temptd;
}
//
// TIMEPOINT::OPERATOR -
//
//
timepoint operator - ( timepoint &tdone, timespan &tdtwo )
{
timepoint temptd, tanother;
long dx,tx;
if ( (tdone.dateval < tdtwo.daysval) ||
((tdone.dateval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))) {
temptd.setdt(0L,0L);
}
else {
if (tdone.msecval < tdtwo.msecval) {
tanother.dateval = tdone.dateval - 1;
tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
}
else {
tanother = tdone;
}
tx = tanother.msecval - tdtwo.msecval;
dx = tanother.dateval - tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
}
return temptd;
}
//
// TIMEPOINT::OPERATOR -
//
//
timespan operator - ( timepoint &tdone, timepoint &tdtwo )
{
timespan temptd;
timepoint tanother;
long dx,tx;
if ( (tdone.dateval < tdtwo.dateval) ||
((tdone.dateval == tdtwo.dateval) && (tdone.msecval < tdtwo.msecval))) {
temptd.setdt(0L,0L);
}
else {
if (tdone.msecval < tdtwo.msecval) {
tanother.dateval = tdone.dateval - 1;
tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
}
else {
tanother = tdone;
}
tx = tanother.msecval - tdtwo.msecval;
dx = tanother.dateval - tdtwo.dateval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
temptd.setdt(dx,tx);
}
return temptd;
}
//
// TIMEPOINT::OPERATOR +=
//
//
timepoint operator += ( timepoint &tdone, timespan &tdtwo )
{
long dx,tx;
tx = tdone.msecval + tdtwo.msecval;
dx = tdone.dateval + tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
tdone.setdt(dx,tx);
return tdone;
}
//
// TIMEPOINT::OPERATOR -=
//
//
timepoint operator -= ( timepoint &tdone, timespan &tdtwo )
{
timepoint tanother;
long dx,tx;
if ( (tdone.dateval < tdtwo.daysval) ||
((tdone.dateval == tdtwo.daysval) && (tdone.msecval < tdtwo.msecval))) {
tdone.setdt(0L,0L);
}
else {
if (tdone.msecval < tdtwo.msecval) {
tanother.dateval = tdone.dateval - 1;
tanother.msecval = tdone.msecval + (24L * 60L * 60L * 1000);
}
else {
tanother = tdone;
}
tx = tanother.msecval - tdtwo.msecval;
dx = tanother.dateval - tdtwo.daysval;
dx += tx / (24L * 60L * 60L * 1000L);
tx %= (24L * 60L * 60L * 1000L);
tdone.setdt(dx,tx);
}
return tdone;
}
//
// TIMEPOINT::OPERATOR <
//
//
int operator < ( timepoint &tdone, timepoint &tdtwo )
{
if ( (tdone.dateval < tdtwo.dateval) ||
((tdone.dateval == tdtwo.dateval) && (tdone.msecval < tdtwo.msecval)))
return 1;
else
return 0;
}
//
// TIMEPOINT::OPERATOR >
//
//
int operator > ( timepoint &tdone, timepoint &tdtwo )
{
if ( (tdone.dateval > tdtwo.dateval) ||
((tdone.dateval == tdtwo.dateval) && (tdone.msecval > tdtwo.msecval)))
return 1;
else
return 0;
}
//
// TIMEPOINT::OPERATOR ==
//
//
int operator == ( timepoint &tdone, timepoint &tdtwo )
{
if ( (tdone.dateval == tdtwo.dateval) &&
(tdone.msecval == tdtwo.msecval) )
return 1;
else
return 0;
}
//
// TIMEPOINT::OPERATOR !=
//
//
int operator != ( timepoint &tdone, timepoint &tdtwo )
{
if ( (tdone.dateval != tdtwo.dateval) ||
(tdone.msecval != tdtwo.msecval) )
return 1;
else
return 0;
}
//
// TIMEPOINT::OPERATOR <=
//
//
int operator <= ( timepoint &tdone, timepoint &tdtwo )
{
if (((tdone.dateval == tdtwo.dateval) &&
(tdone.msecval == tdtwo.msecval) ) ||
((tdone.dateval < tdtwo.dateval) ||
((tdone.dateval == tdtwo.dateval) && (tdone.msecval < tdtwo.msecval))))
return 1;
else
return 0;
}
//
// TIMEPOINT::OPERATOR >=
//
//
int operator >= ( timepoint &tdone, timepoint &tdtwo )
{
if (((tdone.dateval == tdtwo.dateval) &&
(tdone.msecval == tdtwo.msecval) ) ||
((tdone.dateval > tdtwo.dateval) ||
((tdone.dateval == tdtwo.dateval) && (tdone.msecval > tdtwo.msecval))))
return 1;
else
return 0;
}
//
// TIMEPOINT::TIMEPOINT
//
//
timepoint::timepoint(int year, int month, int day,
int hour, int minute, int second,
int millisecond)
{
date_to_astro(&year,&month,&day,&dateval);
time_to_astro(&hour,&minute,&second,&millisecond,&msecval);
}
//
// TIMEPOINT::~TIMEPOINT
//
// Destructor, waits for keypress on screen, closes files for other modes.
//
timepoint::~timepoint()
{
}
//
// TIMEPOINT::PRINT
//
// Prints internal values of a timepoint variable.
//
void timepoint::print()
{
int year, month, day, hour, mins, sec, millisec;
astro_to_date(&year,&month,&day,&dateval);
astro_to_time(&hour,&mins,&sec,&millisec,&msecval);
printf("%04d/%02d/%02d %02d:%02d:%02d.%d\n",
year,month,day,hour,mins,sec,millisec);
}
//
// TIMEPOINT::MDY2W
//
// Prints internal values of a timepoint variable.
//
char* timepoint::mdy2w(char *str)
{
int year, month, day;
astro_to_date(&year,&month,&day,&dateval);
if (__european) sprintf(str,"%02d/%02d/%02d",day,month,year%100);
else sprintf(str,"%02d/%02d/%02d",month,day,year%100);
return( str );
}
//
// TIMEPOINT::MDY4W
//
// Prints internal values of a timepoint variable.
//
char* timepoint::mdy4w(char *str)
{
int year, month, day;
astro_to_date(&year,&month,&day,&dateval);
if (__european) sprintf(str,"%02d/%02d/%04d",day,month,year);
else sprintf(str,"%02d/%02d/%04d",month,day,year);
return( str );
}
//
// TIMEPOINT::MDY2
//
// Prints internal values of a timepoint variable.
//
char* timepoint::mdy2(char *str)
{
int year, month, day;
astro_to_date(&year,&month,&day,&dateval);
if (__european) sprintf(str,"%02d%02d%02d",day,month,year%100);
else sprintf(str,"%02d%02d%02d",month,day,year%100);
return( str );
}
//
// TIMEPOINT::MDY4
//
// Prints internal values of a timepoint variable.
//
char* timepoint::mdy4(char *str)
{
int year, month, day;
astro_to_date(&year,&month,&day,&dateval);
if (__european) sprintf(str,"%02d%02d%04d",day,month,year);
else sprintf(str,"%02d%02d%04d",month,day,year);
return( str );
}
//
// TIMEPOINT::Y2MD
//
// Prints internal values of a timepoint variable.
//
char* timepoint::y2md(char *str)
{
int year, month, day;
astro_to_date(&year,&month,&day,&dateval);
sprintf(str,"%02d%02d%02d",year%100,month,day);
return( str );
}
//
// TIMEPOINT::Y4MD
//
// Prints internal values of a timepoint variable.
//
char* timepoint::y4md(char *str)
{
int year, month, day;
astro_to_date(&year,&month,&day,&dateval);
sprintf(str,"%04d%02d%02d",year,month,day);
return( str );
}
//
// TIMEPOINT::SETDT
//
// Sets internal values of a timepoint variable.
//
void timepoint::setdt(long dx, long tx)
{
dateval = dx;
msecval = tx;
}